import pandas as pd
from sqlalchemy import create_engine
import re

def clean_date(s):
    # 去掉前缀和空格，只保留日期部分
    if pd.isnull(s):
        return None
    s = str(s).replace('成文日期：', '').replace('发文日期：', '').strip()
    # 支持 2024年04月17日 或 2024-04-17
    match = re.search(r'(\d{4})[年\-](\d{1,2})[月\-](\d{1,2})[日]?', s)
    if match:
        y, m, d = match.groups()
        return f"{y}-{int(m):02d}-{int(d):02d}"
    # 如果是标准日期格式直接返回
    match2 = re.search(r'\d{4}-\d{1,2}-\d{1,2}', s)
    if match2:
        return match2.group(0)
    return None

# 读取 Excel 文件
df = pd.read_excel('个人所得税相关法规.xlsx')

df['成文日期_clean'] = df['成文日期'].apply(clean_date)
df['发文日期_clean'] = df['成文日期'].apply(clean_date)  # 如果没有发文日期列，仍用成文日期

# 字段映射和处理，按数据库表结构补充缺省字段
# 只映射有数据的字段，其余字段设为默认或空

df_db = pd.DataFrame({
    'title': df['政策'],
    'symbol': df['发文字号'].str.replace('发文字号：', '').str.strip(),
    'write_time': pd.to_datetime(df['成文日期_clean'], format='%Y-%m-%d', errors='coerce').dt.date,
    'publish_date': pd.to_datetime(df['发文日期_clean'], format='%Y-%m-%d', errors='coerce').dt.date,
    'efficacy': 1,  # 默认有效
    'context': df['正文'],
    'department': '财政部 税务总局',  # 可根据实际情况调整
    'context_type': '政策文件',       # 默认类型
    'level': 1,                     # 默认国家级
    'type': None,
    'industry_type_1': None,
    'industry_type_2': None,
    'address_1': '中国',
    'address_2': None,
    'address_3': None,
    'address_4': None,
    'address_5': None,
    'address_6': None,
    'is_company': None,
    'start_time': None,
    'end_time': None,
    'link': df['链接'],
})

# 创建数据库连接（用户名: root，密码: ，数据库: test）
engine = create_engine('mysql+pymysql://root:你的数据库密码@localhost:3306/test?charset=utf8mb4')

# 导入数据到 policy_info 表
df_db.to_sql('policy_info', engine, if_exists='append', index=False)

print('导入完成！')
